精通Linux系列三十四:软件安装与管理
点击关注公众号,AI&编程干货及时送达
安装软件
你可能会时不时地想要在你的Linux系统中添加更多的软件。但是,安装方法各不相同,因为Linux有多种“打包”软件的标准。你的Linux发行版可能在命令行进行安装,也可能使用一个或多个GUI工具,或者两者兼而有之。最常见的软件包类型有:
• **.deb 文件*Debian软件包,被Debian、Ubuntu和其他发行版使用。我们将介绍
aptitude
、apt-get
和dpkg
(安装此格式软件的包管理命令)。• **.rpm 文件*RPM包管理器文件被Red Hat、Fedora、CentOS和其他发行版所使用。这些文件由
dnf
、yum
和rpm
软件包管理器安装。• **.tar.gz 文件和 *.tar.bz2 文件*压缩的tar文件。这种文件不是一个可安装的“包”,而是由
tar
创建并用gzip
(.gz)或bzip2
(.bz2)压缩的文件集合。而Debian和RPM软件包可以用一个命令安装,压缩的tar文件通常需要多个手动步骤。
你必须了解你的Linux系统使用哪种包类型。通常情况下,你不能(或不应该)混合像Debian和RPM这样的包类型。幸运的是,现代Linux系统在初始安装时通常会设置一个包管理器,所以你只需要使用它。
如果你不确定你正在运行哪个Linux发行版,以下命令之一应该能给你一个线索:
→ cat /etc/issue
Ubuntu 15.10 \n \l
→ more /etc/*-release
NAME="Ubuntu"
VERSION="15.10 (Wily Werewolf)"
...
大多数新软件必须由超级用户安装,因此你需要运行sudo
命令(或等效命令)进行任何安装。例如:
→ sudo rpm -ivh mypackage.rpm
密码: ********
你的Linux发行版几乎肯定带有用于操作软件包的图形程序,但根据你的需求,你可能会发现命令行程序更简单或更快。
dnf
stdin stdout - 文件 -- opt --help --version
dnf [选项] [软件包]
dnf
是最新的RPM软件包管理器(*.rpm* 文件)。
以下表格列出了与dnf
相关的常见操作:
操作 | dnf命令 |
搜索满足你需求的软件包(支持*和?通配符) | dnf search * 命令名称* |
检查是否已安装软件包 | dnf list installed * 软件包名称* |
下载但不安装软件包 | dnf download * 软件包名称* |
下载并安装软件包 | sudo dnf install * 软件包名称* |
安装软件包文件 | sudo dnf install * 文件*.rpm |
了解软件包信息 | dnf info * 软件包名称* |
列出软件包的内容 | rpm -ql * 软件包名称* |
查找已安装文件所属的软件包 | dnf provides * /文件路径* |
更新已安装的软件包 | sudo dnf upgrade * 软件包名称* |
删除已安装的软件包 | sudo dnf remove * 软件包名称* |
列出系统上安装的所有软件包 | `dnf list installed |
检查系统上所有软件包的更新 | dnf check-update |
更新系统上的所有软件包 | sudo dnf upgrade |
yum
stdin stdout - 文件 -- opt --help --version
yum [选项] [软件包]
yum
是Red Hat Enterprise Linux、Fedora、CentOS和其他发行版中流行的RPM包管理器(*.rpm* 文件)。它主要是一个命令行工具,尽管您可能会遇到用于 yum
的图形前端,例如Fedora Linux上的PackageKit(包工具)。下表列出了使用 yum
的常见操作。对于 yum
不提供的本地文件的操作,我们直接使用 rpm
命令:
动作 | yum命令 |
搜索满足您需求的包 (支持通配符 * 和 ?) | yum search * command_name* |
检查是否已安装一个包 | yum list installed * package_name* |
下载包但不安装。需要 downloadonly 插件; 安装它,运行:sudo yum install \ yum-downloadonly | sudo yum --downloadonly install * package_name* |
下载并安装一个包 | sudo yum install * package_name* |
安装一个包文件 | rpm -ivh * package*.rpm |
了解一个包的信息 | yum info * package_name* |
列出一个包的内容 | rpm -ql * package_name* |
查找已安装文件属于哪个包 | yum provides * /path** /to/file* |
更新已安装的包 | sudo yum update * package_name* |
移除已安装的包 | sudo yum remove * package_name* |
列出系统上安装的所有包 | `yum list installed |
检查系统上所有包的更新 | yum check-update |
更新系统上的所有包 | sudo yum update |
rpm
stdin stdout - 文件 -- 选项 --帮助 --版本
rpm [选项] [文件]
如果您更喜欢手动下载和安装RPM包,请使用 rpm
,这是 yum
在后台运行的相同的包管理程序。与 yum
不同,rpm
在您的计算机上本地工作:它不在互联网上搜索新的软件包。
rpm
不仅安装软件,还确保您的系统具有所有的前提条件。例如,如果包 superstuff 需要你尚未安装的包 otherstuff,rpm
将不会安装 superstuff。但是,如果您的系统通过了测试,rpm
将安装请求的包。
RPM文件名通常采用以下格式 -.rpm
有时需要一个文件名参数(如 emacs-23.1-17.i386.rpm),其他时候只需要包名(如 emacs)。
动作 | rpm命令 |
检查是否已安装一个包 | rpm -q * package_name* |
安装一个包文件 | sudo rpm -ivh * package_file*.rpm |
了解一个包的信息 | rpm -qi * package_name* |
列出一个包的内容 | rpm -ql * package_name* |
查找已安装文件属于哪个包 | rpm -qf * /path/to/file* |
| 更新一个已安装的软件包 | sudo rpm -Uvh ---package_file---.rpm
|| | 删除一个已安装的软件包 | sudo rpm -e ---package_name---
| | 列出系统上安装的所有软件包 | rpm -qa | less
|
APT
stdin stdout - 文件 -- 选项 --帮助 --版本
apt-get [选项] 软件包
apt-file [选项] 字符串
apt-cache [选项] 软件包
dpkg [选项] 软件包
APT(Advanced Packaging Tool(高级打包工具))命令组可以安装、删除和处理Debian(.deb)软件包。
在系统上升级软件包之前,请运行 sudo apt-get update
以检索关于哪些软件包可用的最新信息。
操作 | APT 命令 |
搜索符合您需求的软件包 | apt-file search ---package_name--- |
检查是否安装了一个软件包 | dpkg -s ---package_name--- |
下载但不安装软件包 | apt-get -d ---package_name--- |
下载并安装软件包 | sudo apt-get install ---package_name--- |
安装一个软件包文件 | dpkg -i ---package_file---.deb |
了解一个软件包的信息 | apt-cache show ---package_name--- |
列出一个软件包的内容 | dpkg -L ---package_name--- |
查找一个已安装文件属于哪个软件包 | dpkg -S ---/path/to/file--- |
更新一个已安装的软件包 | sudo apt-get upgrade ---package_name--- |
删除一个已安装的软件包 | sudo apt-get remove ---package_name--- |
列出系统上安装的所有软件包 | dpkg -l |
检查系统上所有软件包的更新 | sudo apt-get -u upgrade |
更新系统上的所有软件包(要包括内核软件包,请用dist-upgrade 替换upgrade ) | sudo apt-get upgrade |
aptitude
stdin stdout - 文件 -- 选项 --帮助 --版本
aptitude [选项] [软件包]
aptitude
是另一个命令行包管理器,用于处理Debian(.deb)软件包。对于某些操作,例如使用本地*.deb*文件,您还需要知道dpkg
,因为aptitude
没有这个功能。
操作 | aptitude 命令 |
搜索符合您需求的软件包 | aptitude search ---package_name--- |
检查是否安装了一个软件包(检查输出中的“State: not installed”或“State: installed”) | aptitude show ---package_name--- |
下载但不安装软件包 | aptitude download ---package_name--- |
下载并安装软件包 | sudo aptitude install ---package_name--- |
安装一个软件包文件 | dpkg -i ---package_file---.deb |
了解一个软件包的信息 | aptitude show ---package_name--- |
列出一个软件包的内容 | dpkg -L ---package_name--- |
查找一个已安装文件属于哪个软件包 | dpkg -S ---/path/to/file--- |
更新一个已安装的软件包 | sudo aptitude safe-upgrade ---package_name--- |
卸载一个已安装的包 | sudo aptitude remove * 包名* |
列出系统上安装的所有包 | `aptitude search '~i' |
检查系统上所有包的更新 | aptitude --simulate full-upgrade |
更新系统上的所有包 | sudo aptitude full-upgrade |
tar.gz 和 tar.bz2 文件
以*.tar.gz* 和 .tar.bz2 结尾的打包软件文件通常包含需要编译(构建)的源代码才能安装。典型的构建指令是:
1. 列出包内容,每行一个文件。确保每个文件在提取时不会覆盖系统上的重要内容,无论是意外还是恶意的:
→ tar tvf package.tar.gz | less gzip
→ tar tvf package.tar.bz2 | less bzip22. 如果满意,将文件提取到新目录中。出于安全原因,使用您自己的账户运行这些命令,而不是root:
→ mkdir newdir
→ cd installation_directory
→ tar xvf <路径>/package.tar.gz gzip
→ tar xvf <路径>/package.tar.bz2 bzip23. 查找一个名为 INSTALL 或 README 的提取文件。阅读它以了解如何构建软件,例如:
→ cd newdir
→ less INSTALL4. 通常,INSTALL 或 README 文件会告诉您在当前目录中运行一个名为
configure
的脚本,然后运行make
,然后运行make install
。查看您可以传递给configure
脚本的选项:→ ./configure --help
然后安装软件:→ ./configure options
→ make
→ sudo make install
推荐阅读
你好,我是拾叁,7年开发老司机、互联网两年外企5年。怼得过阿三老美,也被PR comments搞崩溃过。这些年我打过工,创过业,接过私活,也混过upwork。赚过钱也亏过钱。一路过来,给我最深的感受就是不管学什么,一定要不断学习。只要你能坚持下来,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯和编程知识,帮你积累弯道超车的资本。